【Spring】AOP 面向切面编程

您所在的位置:网站首页 spring aop具体实现 【Spring】AOP 面向切面编程

【Spring】AOP 面向切面编程

2023-08-16 17:29| 来源: 网络整理| 查看: 265

总结: Aspectj表示切面执行时间,用的通知(Advice)。 这个通知可以使用注解表示。 5个注解表示切面的5个执行时间, 这些注解叫做通知注解。

@Before : 前置通知 👉【Spring】AOP 面向切面编程-前置通知(掌握)@AfterRetunring: 后置通知 👉【Spring】AOP 面向切面编程-后置通知(掌握)@Around: 环绕通知 👉【Spring】AOP 面向切面编程-环绕通知(掌握)@AfterThrowing:异常通知@After:最终通知 一、@AfterThrowing:异常通知 1.异常通知方法的定义(在切面类中)

1)方法是public 2)方法是没有返回值,是void 3)方法名称自定义 4)方法有参数是Exception

public void myAfterThrowing(Exception ex){ } 2.@AfterThrowing 异常通知的 注解语法 @AfterThrowing(value="切入点表达式",throwing="自定义变量") 属性: value 切入点表达式throwing 自定义变量,表示目标方法抛出的异常。 变量名必须和通知方法的形参名一样 位置:在方法的上面

特点:

在目标方法抛出异常后执行的, 没有异常不执行能获取到目标方法的异常信息。不是异常处理程序。可以得到发生异常的通知, 可以发送邮件,短信通知开发人员。看做是目标方法的监控程序。 3.使用aspectj框架的注解,实现异常通知

1.在业务接口中添加一个方法:doSecond 在这里插入图片描述

2.实现这个方法 在这里插入图片描述 3.添加异常通知注解(在方法上面添加)

@AfterThrowing(value="execution(* *..SomeServiceImpl.doSecond(..))", throwing ="ex") public void myAfterThrowing(Exception ex){ }

在这里插入图片描述 4.👇添加输出语句

@AfterThrowing(value="execution(* *..SomeServiceImpl.doSecond(..))", throwing ="ex") public void myAfterThrowing(Exception ex){ System.out.println("异常通知,在目标方法抛出异常时执行的,异常原因是:"+ ex.getMessage()); }

异常发生可以做: 1.记录异常的时间,位置,等信息。 2.发送邮件,短信,通知开发人员

5.测试: 在这里插入图片描述 6.让业务方法抛出一个异常 在这里插入图片描述 测试👇 在这里插入图片描述 异常通知的执行

try{ SomeServiceImpl.doSecond(..) }catch(Exceptoin e){ myAfterThrowing(e); } 二、@After 最终通知 最终通知方法的定义

1)方法是public 2)方法是没有返回值,是void 3)方法名称自定义 4)方法没有参数

@Aspect public class MyAspact { public void myAfter(){ } } 1.@After 最终通知注解语法格式 @After(value="切入点表达式") 属性: value 切入点表达式位置: 在方法的上面

特点:

在目标方法之后执行的。总是会被执行。可以用来做程序最后的收尾工作。例如清除临时数据,变量。 清理内存 2.使用aspectj框架的注解,实现最终通知

1.在业务接口中添加一个方法:doThird 在这里插入图片描述

2.实现这个方法 在这里插入图片描述

3.添加最后通知注解(在方法上面添加)

@After(value="execution(* *..SomeServiceImpl.doThird(..))") public void myAfter(){ }

4.👇添加输出语句 在这里插入图片描述 5.测试:业务方法没有异常 在这里插入图片描述

6.如果业务方法抛异常 在这里插入图片描述 测试:最终通知依然会被执行 在这里插入图片描述 最终通知的执行

try{ SomeServiceImpl.doThird(..) }finally{ myAfter() }


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3